Crate cranelift_codegen
source ·Expand description
Cranelift code generation library.
Re-exports
pub use crate::verifier::verify_function;
pub use crate::write::write_function;
pub use cranelift_bforest as bforest;
pub use cranelift_entity as entity;
pub use gimli;
Modules
- Binary machine code emission.
- The
CFGPrinter
utility. - Cursor library.
- This module gives users to instantiate values that Cranelift understands. These values are used, for example, during interpretation and for wrapping immediates.
- Debug tracing helpers.
- A Dominator Tree represented as mappings of Blocks to their immediate dominator.
- A control flow graph represented as mappings of basic blocks to their predecessors and successors.
- Representation of Cranelift IR functions.
- Instruction Set Architectures.
- A loop analysis represented as mappings of loops to their header Block and parent in the loop tree.
- Compact representation of
Option<T>
for types with a reserved value. - Utility routines for pretty-printing error messages.
- Shared settings module.
- Pass timing.
- A verifier for ensuring that functions are well formed. It verifies:
- Converting Cranelift IR to text.
Macros
- Even when trace logging is disabled, the trace macro has a significant performance cost so we disable it by default.
Structs
- Compilation error, with the accompanying function to help printing it.
- Persistent data structures and compilation pipeline.
- Status of a compiled artifact ready to use.
- A buffer of output to be produced, fixed up, and then emitted to a CodeSink in bulk.
- A
MachBuffer
once emission is completed: holds generated code and records, without fixups. This allows the type to be independent of the backend. - A call site record resulting from a compilation.
- A relocation resulting from a compilation.
- A source-location mapping resulting from a compilation.
- Record of stack map metadata: stack offsets containing references.
- A trap record resulting from a compilation.
- A register named in an instruction. This register can be either a virtual register or a fixed physical register. It does not have any constraints applied to it: those can be added later in
MachInst::get_operands()
when theReg
s are converted toOperand
s. - Value location range.
- A type wrapper that indicates a register type is writable. The underlying register can be extracted, and the type wrapper can be built using an arbitrary register. Hence, this type-level wrapper is not strictly a guarantee. However, “casting” to a writable register is an explicit operation for which we can audit. Ordinarily, internal APIs in the compiler backend should take a
Writable<Reg>
whenever the register is written, and the usual, frictionless way to get one of these is to allocate a new temporary.
Enums
- A compilation error.
Constants
- Version number of this crate.
Traits
- A machine instruction.
- A trait describing the ability to encode a MachInst into binary machine code.
- An object that can be used to create the text section of an executable.
Type Definitions
- A convenient alias for a
Result
that usesCodegenError
as the error type. CompiledCode
in its final form (i.e. afterFunctionParameters
have been applied), ready for consumption.- Resulting map of Value labels and their ranges/locations.